/*
 * @Author: your name
 * @Date: 2021-08-31 09:17:35
 * @LastEditTime: 2021-09-04 15:32:36
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \briup\5-javascript\day07\1-自定义排序.js
 */

var arr1 = [10, 20, 1, 3, 4, 2, 30];
var arr2 = ['hello', 'dbc', 'abc', 'fff', 10, 30];
//升序
function numcompare(n1, n2) {
    return n1 - n2;
}
arr1.sort(numcompare);
console.log(arr1);
//降序
function numcp2(n1, n2) {
    return n2 - n1;
}
arr1.sort(numcp2);
console.log(arr1);

arr1.reverse(numcompare); //反序：索引位置
console.log(arr1);

// 字符串类型的数据项不能以算术操作符进行排序依据
//arr2.sort(numcompare);//两个非数组相减为NaN 
//console.log(arr2);//原样输出

//arr2.sort();//ASCII
function strcp(s1, s2) {
    if (s1 > s2) { return -1; } else if (s1 < s2) { return 1; } else return 0;

}
arr2.sort(strcp);
console.log(arr2) //降序

//升序
//不想再全局声明一个函数，改为升序的方式可以用匿名函数
//arr2.sort(function(){});
arr2.sort(function(s1, s2) {
    if (s1 > s2) { return 1; } else if (s1 < s2) { return -1; } else return 0;
});
console.log(arr2);

var arr3 = [
    { name: 'zs', age: 10 },
    { name: 'lisi', age: 15 },
    { name: 'ww', age: 18 }
];
arr3.sort(); //默认排序 item.toString()ASCII 'object Object'
console.log(arr3); //原样输出

//所以对象排序要一定用自定义排序
//字符串的比较 v1>v2返回正数，就是升序排列
//数值的比较 v1-v2返回正数 v1>v2 就是升序排列

//升序
function compare(o1, o2) {
    if (typeof o1 == 'object' && o2 instanceof Object) {
        if (o1.hasOwnProperty('name') && o2.hasOwnProperty('name')) {
            if (o1.name > o2.name) return 1;
            else if (o1.name < o2.name) return -1;
            else return 0;
        }
    }
}
arr3.sort(compare);
console.log(arr3);

//快速写降序
arr3.sort(function(obj1, obj2) {
    return obj2.age - obj1.age;
});
console.log(arr3);